約 5,188,748 件
https://w.atwiki.jp/wiki10_ms/pages/14.html
ウィキはみんなで気軽にホームページ編集できるツールです このページは自由に編集することができます。 メールで送られてきたパスワードを用いてログインすることで、各種変更(サイト名、トップページ、メンバー管理、サイドページ、デザイン、ページ管理、等)することができます ■ 新しいページを作りたい!! ページの下や上に「新規作成」というリンクがあるので、それをクリックしてください。 ■ 表示しているページを編集したい! ページ上の「このページを編集」というリンクや、ページ下の「編集」というリンクを押してください。 ■ ブログサイトの更新情報を自動的に載せたい!! お気に入りのブログのRSSを使っていつでも新しい情報を表示できます。詳しくはこちらをどうぞ。 ■ ニュースサイトの更新情報を自動的に載せたい!! RSSを使うと簡単に情報通になれます、詳しくはこちらをどうぞ。 ■ その他にもいろいろな機能満載!! 詳しくは、FAQ・初心者講座@wikiをみてね☆ 分からないことは? @wikiの詳しい使い方はヘルプ・FAQ・初心者講座@wikiをごらんください。メールでのお問い合わせも受け付けております。 ユーザ同士のコミュニケーションにはたすけあい掲示板をご利用ください
https://w.atwiki.jp/atachi/pages/34.html
コンテナ コンテナクラス 説明 Grid コンテナを任意の数のグリッドに区切る。各グリッド内を境界としてコンポーネントを配置したり、複数のグリッドをまたぐこともできる。 StackPanel コンポーネントを任意の方向に向けて一列に並べる。「上下方向」か「左右方向」の指定はOrientation属性で指定する。表示はFlexのHBoxやVBoxのようになる(または、Directionを指定したBox)。 WrapPanel コンポーネントを左上から右下に向けて連続して並べる。並べる際の方向は左から右方向か、上から下方向で選択できる。 Canvas 座標を指定できるので、コンポーネントを自由な場所に配置できる。 マウスイベントの問題 DaDMgrはアプリケーションのルート要素が受け取っているPreviewDragOverイベントをハンドリングし、Adornerをマウスに追従させているのですが、背景色を設定しないコンテナにおいて、マウスイベントが発生しない問題があります。(WPFでは予てからのバグなのか仕様なのか・・・) ただし、この問題は簡単に回避可能で、Backgroundプロパティを設定すればよいだけです。 透過色も使用できます。 Window Grid Grid.Background SolidColorBrush / /Grid.Background /Grid /Window
https://w.atwiki.jp/pkkai/pages/14.html
基本的な使い方
https://w.atwiki.jp/fumiduki1985/pages/341.html
WPFアプリケーションのエントリーポイントとなるMain()関数は、App.xaml(デフォルトの名前。変更した場合はこれに限らない。)をビルドした際に自動実装され、普段プログラマが実装することはない。 しかし、Main関数を自前で実装したい場合は、App.xamlのプロパティで「ビルドアクション」を「Page」に変更すればよい。 こうすることで、Main関数が自動実装されなくなり、独自のMain関数を実装可能になる。 このページのタグ一覧 C# WPF プログラミング 最終更新日:2018/02/06
https://w.atwiki.jp/nina_a/pages/57.html
アニメーション このページを編集 概要 WPFでは,マージンなどの見た目に関わるプロパティの値を順次変化させることでアニメーションを実現する. XxxAnimationクラス WPFには時間の経過に応じて値を変化させるXxxAnimationクラスが用意されている.Xxxには変化させる値のタイプが入り,double型を変化させる場合にはDoubleAnimationクラスを利用する. +DoubleAnimationサンプル Window x Class="WpfSampleApplication.MainWindow" xmlns="http //schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns x="http //schemas.microsoft.com/winfx/2006/xaml" Title="MainWindow" Height="350" Width="525" StackPanel Button Width="200" Height="100" アニメーションテスト Button.Triggers EventTrigger RoutedEvent="MouseEnter" BeginStoryboard Storyboard DoubleAnimation To="300" Duration="0 0 2" Storyboard.TargetProperty="(Button.Width)" / /Storyboard /BeginStoryboard /EventTrigger EventTrigger RoutedEvent="MouseLeave" BeginStoryboard Storyboard DoubleAnimation To="200" Duration="0 0 2" Storyboard.TargetProperty="(Button.Width)" / /Storyboard /BeginStoryboard /EventTrigger /Button.Triggers /Button /StackPanel /Window 主な依存プロパティ From アニメーションの開始値.指定しない場合は現在の値. To アニメーションの終了値.指定しない場合は既定の(オリジナルの)値. By アニメーションの変量.From+By=To.ToとByの両方が指定された場合はToが優先. Duration アニメーションの時間.Duration.Foreverで永遠に続く(無限大の時間の)アニメーション.Foreverを指定すると,無限大の時間をかけてFromからTo,Byまでアニメーションするため,変化しているように見えない.無限回続くアニメーションの意味ならばRepeatBehaviorにRepeatBehavior.Foreverをセットする. 主なプロパティ AccelerationRatio Dulationの内,加速に使う時間の割合.DecelerationRatioとの和が1を超えてはいけない. AutoReverse trueなら,アニメーション終了後,逆再生する FillBehavior アニメーション終了時の動作指定.既定は保留(アニメーション終了時の値を維持).Stopを指定すると終了(アニメーション終了時の値を破棄)する. DecelerationRatio Dulationの内,減速に使う時間の割合.AccelerationRatioとの和が1を超えてはいけない. RepeatBehavior アニメーションの繰り返し動作指定.既定は1回実行.回数や実行時間で指定. SpeedRatio アニメーションの速度.5を指定すれば5倍の早さ. ストーリーボード(Storyboard) アニメーションの対象(TargetNameとTargetProperty)をStoryboardで指定する.複数XxxAnimationを記述すれば,それらを同時実行できる. +Storyboardサンプル Storyboard DoubleAnimation To="300" Duration="0 0 2" AccelerationRatio="0.2" DecelerationRatio="0.2" Storyboard.TargetProperty="(Button.Width)" / DoubleAnimation To="300" Duration="0 0 2" AccelerationRatio="0.2" DecelerationRatio="0.2" Storyboard.TargetProperty="(Button.Height)" / /Storyboard この例ではTargetPropertyを各アニメーションごとに指定しており,TargetNameは指定していない. アニメーションを制御する 止めたり,リスタートしたり.それぞれのボタンのトリガーでPauseStoryBoardとかやってもBeginStoryBoardが見つからないので止まらない.なのでその親要素のStackPanelでまとめて記述.他の操作は MSDN 参照.再生速度とかもっと細かい制御はXAMLでは無理. +アニメーション制御サンプル Window x Class="WpfSampleApplication.MainWindow" xmlns="http //schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns x="http //schemas.microsoft.com/winfx/2006/xaml" Title="MainWindow" Height="400" Width="500" Grid Grid.RowDefinitions RowDefinition Height="*" / RowDefinition Height="Auto" / /Grid.RowDefinitions Button Width="200" Height="100" Name="dest" Grid.Row="0" アニメーションテスト /Button StackPanel Orientation="Horizontal" Grid.Row="1" HorizontalAlignment="Center" Button Width="100" Margin="5" Content="開始" Name="start" / Button Width="100" Margin="5" Content="停止" Name="pause" / Button Width="100" Margin="5" Content="再開" Name="resume" / Button Width="100" Margin="5" Content="終了" Name="stop" / StackPanel.Triggers EventTrigger RoutedEvent="Button.Click" SourceName="start" BeginStoryboard x Name="animation" Storyboard Storyboard.TargetName="dest" DoubleAnimation To="300" Storyboard.TargetProperty="(Button.Width)" FillBehavior="Stop" Duration="0 0 15"/ DoubleAnimation To="300" Storyboard.TargetProperty="(Button.Height)" FillBehavior="Stop" Duration="0 0 15"/ /Storyboard /BeginStoryboard /EventTrigger EventTrigger RoutedEvent="Button.Click" SourceName="pause" PauseStoryboard BeginStoryboardName="animation"/ /EventTrigger EventTrigger RoutedEvent="Button.Click" SourceName="resume" ResumeStoryboard BeginStoryboardName="animation"/ /EventTrigger EventTrigger RoutedEvent="Button.Click" SourceName="stop" StopStoryboard BeginStoryboardName="animation"/ /EventTrigger /StackPanel.Triggers /StackPanel /Grid /Window イージング(Easing) イージングを使うと値の変化の仕方を変えることができる.全てのEasingFunctionについては MSDN 参照. +イージング関数にPowerEaseを指定するサンプル DoubleAnimation To="300" Storyboard.TargetProperty="(Button.Width)" Duration="0 0 2" DoubleAnimation.EasingFunction PowerEase EasingMode="EaseInOut" Power="2" / /DoubleAnimation.EasingFunction /DoubleAnimation すべてのEasingFunctionはEasingModeというプロパティを持っている. EaseIn アニメーション開始付近でイージングする EaseOut アニメーション終了付近でイージングする EaseInOut アニメーション開始と終了付近の両方でイージングする キーフレーム指定によるアニメーション XxxAnimationの変わりにXxxAnimationUsingKeyFrameを使うと,指定の時刻(キーフレーム)における値を指定することでアニメーションを実現できる. +キーフレーム指定によるアニメーション DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(Button.Width)" LinearDoubleKeyFrame Value="300" KeyTime="0 0 1"/ DiscreteDoubleKeyFrame Value="200" KeyTime="0 0 2" / SplineDoubleKeyFrame Value="100" KeyTime="0 0 3" / EasingDoubleKeyFrame Value="300" KeyTime="0 0 4" EasingDoubleKeyFrame.EasingFunction BounceEase / /EasingDoubleKeyFrame.EasingFunction /EasingDoubleKeyFrame /DoubleAnimationUsingKeyFrames キーフレームを指定するときにはYyyXxxKeyFrameを使う.Yyyにはそのキーフレームまでの値の変化の仕方が入り,Linear(直線),Discrete(不連続),Spline(スプライン),Easing(指定のイージング関数)の4種類. このサンプルでは,1秒経過まで直線的に300まで変化し,2秒経過した瞬間に200に変化,3秒経過までスプライン曲線を描いて100まで変化,その後EasingFunctionに指定されたBounceEaseを使って300まで変化する. カテゴリ:WPF 名前
https://w.atwiki.jp/atachi/pages/30.html
コマンドの呼び出し [#o999e49e] コマンドの対象 [#zf5396dd] コマンドの『中身』の実装 [#f2e1a4a6] カスタムコマンドの作成 [#b4d9c788] ICommandを使用したコマンドクラスの実装 [#l2907103] コマンドソースの作成 [#xa070e5b] コマンドを利用することで、コマンドが設定されたコンポーネントの意味とコマンドが実際に行うロジックとの関係が切り離される。 右クリックメニューの「切り取り」「コピー」「貼り付け」はコマンドの代表例である。それぞれの意味は誰しも知っているが、各コマンドがどのような処理を行うかは各アプリケーションが実装しなければならない。 WPFのコマンドもこのような意味であると捉えることができる。 MSDN コマンド実行の概要 WPF コマンド コマンドとは実行されるアクションで、ICommandを継承しアクションを実装します。 コマンドの呼び出しは、コマンドソースから行います。 コマンドソースとはコマンドを呼び出す対象の要素です。ICommandSource を実装したクラスです。 WFPではButtonクラスやMenuItemクラスが実装済みです。 コマンドターゲットとはコマンドを実行する対象の要素です。 コマンドの呼び出し ボタンが押された時にコマンドを呼び出したい場合は、Button.Commandに呼び出したいコマンドを指定します。 Button Command="ApplicationCommands.Open" Image Source="images/FileOpen.png" /Image /Button Button Command="ApplicationCommands.Open" CommandParameter="パラメータ" Image Source="images/FileOpen.png" /Image /Button CommandParameter属性はコマンドのハンドラに渡されるパラメータです。 ICommand.Execute の引数にそのまま渡されます。 コード上からコマンドを呼び出したい場合は、Execute()をコールします。 ApplicationCommands.Paste.Execute(null,textbox1); コマンドの対象 発行されたコマンドを受け取り、コマンドを実行する要素を対象と呼びます。 次の例ではメニューバーから「貼り付け(ApplicationCommands.Paste)」というコマンドを発行した場合に、そのコマンドの実行対象としてmainTextBoxを指定しています。 StackPanel Menu MenuItem Command="ApplicationCommands.Paste" CommandTarget="{Binding ElementName=mainTextBox}" / /Menu TextBox Name="mainTextBox"/ /StackPanel コマンドの『中身』の実装 Windowsアプリケーションでよく使用される「保存」というコマンドは、その意味は誰でも知っているが、何をどのように保存するかはアプリケーションによって異なる。 テキストエディタならばファイルに文字列を保存する事を指しますし、ペインタなどのグラフィックソフトならばビットマップを任意の画像形式で保存します。 このようにコマンドがどのような処理を行うかは、アプリケーション側で実装する必要があります。 あるコマンドを受け取ったときの処理を結びつけることをコマンドバインディングと呼びます。 コマンドバインディングは分離コード、またはXAMLに記述することができます。 コマンドバインディングをコードで実装する場合は、CommandBindingを使用します。 public partical class MainWindow Window { public MainWindow() { InitializeComponent(); // コマンドバインディングの定義 CommandBinding cb = new CommandBinding(); cb.Command = ApplicationCommands.Open; // バインドしたいコマンドの種類 cb.Executed += new ExecutedRoutedEventHandler(onOpenExecuter); this.CommandBinding.Add( cb ); } private void onOpenExecuter(object sender, ExecutedRoutedEventArgs e) { } } また、このコードの等価実装をXAMLで記述することもできます。 Window Window.CommandBindings CommandBinding Command="ApplicationCommands.Open" Execute="onOpenExecuter" / /Window.CommandBindings /Window カスタムコマンドの作成 オリジナルのコマンドを実装したい場合、RoutedCommand または RoutedUICommand の静的なインスタンスを定義します。 static RoutedUICommand StartUp = new RoutedUICommand( "アプリケーションのスタートアップ", "StartUpCommand", typeof(MainWindow)); ICommandを使用したコマンドクラスの実装 namespace my { // コマンドが実行された場合に、任意の処理(アクション)を呼び出す public class RelayCommand ICommand { private readonly Action _execute; private readonly Func bool _canExecute; public RelayCommand(Action execute, Func bool canExecute) { _execute = execute; _canExecute = canExecute; } // ICommand Members public bool CanExecute(object parameter) { // コマンドが実行可能か?? // _canExecuteが設定されている場合は、_canExecuteを使用するが、 // 設定されていない場合は常に「true」とする。 // return _canExecute == null ? true _canExecute(); } // ICommand Members public event EventHandler CanExecuteChanged { add { CommandManager.RequerySuggested += value; } remove { CommandManager.RequerySuggested -= value; } } // ICommand Members public void Execute(object parameter) { // コマンド実行時の処理 _execute(); } } } コマンドソースの作成 コマンドソースとはコマンドを発行できるオブジェクト要素です。 C#コードを使えばコマンドは自由に発行できるのですが、XAMLからコマンドを発行したい場合はオブジェクト要素がコマンドソースとなるように実装しなければなりません。 コマンドソースとなるには ICommandSource を継承したオブジェクト要素を作成します。 ButtonクラスはICommandSourceを継承しているので、ICommandSource.CommandによってButtonがクリックされたときに発行するコマンドを指定します。 コマンドソースを実装する場合、ICommandが発行するCanExecuteChangedイベントをハンドリングします。 CanExecuteChangedはICommandが実行可能である場合にtrueを取得できるイベントで、コマンドが発行可能であるかユーザーに知らせることができます。
https://w.atwiki.jp/atachi/pages/32.html
データバインドの動作 [#k465c5ef] バインドソースの指定 [#rc75f3da] 親からの継承 [#kdff50ec] Binding.RelativeSource [#a581de89] バインドモード [#s700eb9b] OneWayモード [#v08ce3cd] TwoWayモード [#bf122f92] OneWayToSourceモード [#k20c3c47] バインドの実行タイミング [#yf730c72] PropertyChanged [#da09d538] LostFocus [#sed9262c] コレクションのバインド [#h8063c0d] コレクションビューの定義 [#f8ad5be9] 並べ替え・フィルタ・グルーピング [#ra1a06f4] データオブジェクトによるバインド [#t844cc8d] バインドターゲットとなるカスタムコントロールの作成 [#i709f888] WPFのデータバインディングは、データモデル側がプロパティの変更があったことを通知しないとバインドされないので注意が必要。(Adobe Flexのバインディングとはその仕組みがぜんぜん違うので、AdobeFlexお経験したことがある方は注意) バインドのタイミングについては、バインドのタイミング項を参照。 バインドする側(TextBoxなどのコントロール側)をバインドターゲットと呼び、バインドしたい値を持っているオブジェクトをバインドソースと呼ぶ。 MSDN バインディングの概要 MSDN Bindingクラス データバインドの動作 次のXAMLは、リストコントロールに色のリストを表示し選択された項目によって文字の背景色を変更するサンプルです。 リストコントロールと文字コントロールの間でデータバインドが成立しています。 StackPanel TextBlock Width="248" Height="24" Text="Colors " TextWrapping="Wrap"/ ListBox x Name="lbColor" Width="248" Height="56" ListBoxItem Content="Blue"/ ListBoxItem Content="Green"/ ListBoxItem Content="Yellow"/ ListBoxItem Content="Red"/ ListBoxItem Content="Purple"/ ListBoxItem Content="Orange"/ /ListBox TextBlock Width="248" Height="24" Text="You selected color " / TextBlock Width="248" Height="24" TextBlock.Text !-- TextBlockのText属性に関する設定を行うタグ -- Binding ElementName="lbColor" Path="SelectedItem.Content"/ /TextBlock.Text TextBlock.Background !-- TextBlockのBackground属性に関する設定を行うタグ -- Binding ElementName="lbColor" Path="SelectedItem.Content" / /TextBlock.Background /TextBlock /StackPanel Bindingタグがバインドを行うための記述で、 Binding ElementName="lbColor" Path="SelectedItem.Content"/ というのは、同一フォーム内のlbColorというコントロールをバインドするという意味となります。 バインドが実行された場合、SelectedItem.Contentの値をターゲット(TextBlock.TextまたはTextBlock.Background)に与えられます。 バインドが実行されるタイミングはListBoxの実装に含まれており、通常はいくつかの操作がバインド実行のトリガーとして機能する。 ListBoxではアイテムの選択状態が変更した時にバインドが実行される。 バインドソースの指定 バインドターゲットがバインドするバインドソースを指定する方法には次の方法があります。 FrameworkElement.DataContext 親要素からの継承 Bindingクラスの次のプロパティからいずれか Binding.Source Binding.ElementName Binding.RelativeSource 親からの継承 親要素の継承とは、次の例ではGrid要素内のButton要素は、親要素に設定されたDataContext属性を継承しているので、Source属性にバインドソースを指定する必要がありません。 Grid DataContext="{StaticResource myDataSource}" Button Text="{Binding Path=Name}" / /Grid ListBox.ItemsSource属性のようにコレクションをバインドソースとする場合にmyDataSourcesそのものをバインドする為にBinding.Sourceを省略して記述することができます。 Grid DataContext="{StaticResource myDataSources}" ListBox ItemsSource="{Binding}" ... /ListBox /Grid Binding.RelativeSource RelativeSourceマークアップ拡張を使用してバインドソースを設定できる。(マークアップ拡張) Binding.RelativeSourceの設定を行うために、RelativeSourceマークアップ拡張を使用しなければならないので記述が長くなってしまう。(*1) RelativeSourceには指定可能なバインドソースが次の3つから選ぶことができる。 Self 自分自身をバインドソースにする。 TemplatedParent テンプレート(ControlTemplate)の親をバインドソースにする。 FindAncestorモード 上記のものとは指定方法が異なる。 MSDNにはRelativeSourceプロパティについて次のような記述がされている。 バインディング ターゲットの位置に対して相対的な位置を指定することにより、バインディング ソースを取得または設定します。 Selfは自分自身をバインドソースとします。「{RelativeSource Self}」のように指定します。 TextBox Text="{Binding RelativeSource={RelativeSource Self}, Path=Width}" Width="23" / イメージ的には次のような形と同じ。 TextBox Name="text1" Text="{Binding ElementName=text1,Path=Width}" Width="23" / TextBoxにはWidthプロパティの値である「23」という文字が表示される。 TemplatedParentはテンプレート(ControlTemplate)を使用している場合に、テンプレートの親をバインドソースとして使用します。 Window x Class="WpfApplication1.MainWindow" xmlns="http //schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns x="http //schemas.microsoft.com/winfx/2006/xaml" Title="MainWindow" Height="120" Width="250" Window.Resources Style TargetType="Button" Setter Property="Template" Setter.Value ControlTemplate TargetType="Button" Grid Ellipse Fill="{TemplateBinding Background}"/ ContentPresenter Content="{Binding RelativeSource= {RelativeSource TemplatedParent} , Path=Name }" / /Grid /ControlTemplate /Setter.Value /Setter /Style /Window.Resources WrapPanel Button Name="MyButton" Content="ぼたん" / Button Name="MyButton2" Content="ぼたん2" / /WrapPanel /Window 次のように表示が行われます。 #ref error :ご指定のファイルが見つかりません。ファイル名を確認して、再度指定してください。 (Binding_TemplatedParent.jpg) XAMLではButtonのContentには「ぼたん」または「ぼたん2」としていますが、StyleによってButtonコントロールのテンプレートはオーバーライドされます。 ControlTemplateのContentPresenter.Contentはバインディングを設定していますが、ここで設定した「{RelativeSource TemplatedParent}」はテンプレート対象であるButtonコントロールを指します。Buttonコントロールをバインドソースとするため、バインド対象はButton.Nameプロパティとなります。 TemplatedParentはControlTemplateでしか作用しません。 テンプレートを使用できるケースとして、ListBoxのItemTemplateがありますが、ItemTemplate内のDataTemplateでBindingを使用する場合、TemplatedParentを使用することはできません。(エラーや警告は出ません) FindAncestorモードでは指定した型が見つかるまでBindingから親へとオブジェクトツリーを遡りながらバインドソースを決定します。 FindAncestorモードでは、AncestorTypeプロパティに探したい型を指定します。(x Typeマークアップ拡張を使用してAncestorTypeの値を記述する) Grid Name="MyGrid" TextBlock Text="{Binding RelativeSource= {RelativeSource AncestorType= {x Type Grid} } ,Path=Name }" / /Grid TextBlockには「MyGrid」という文字が表示される。 バインドモード UIでバインドを使う場合、ほとんどのケースでバインドターゲットはUIになる。 TextBoxとデータ変数をバインドする場合は、ユーザーから入力した内容をデータ変数に値をコピーする(ターゲット→ソース方向)とシステムロジックによってデータ変数にセットされた値をTextBoxに表示するために値をコピーする(ソース→ターゲット方向)の両方向バインドを使うと値のやりとりが簡単です。そのため、TextBoxはデフォルトでバインドモードがTwoWayになっています。 OneWay ソース → ターゲット リードオンリーのUIに値を表示する場合に使用することが多い。 TwoWay ソース →← ターゲット TextBoxのように、ユーザーからの入力を受ける場合に使用することが多い。 OneWayToSource ソース ← ターゲット 通常のUIでは使用することはまれ。 OneWayモード バインドソースからバインドターゲットへのデータバインディングを行うモード。 値の設定は一方通行なので、アプリケーションのデータをUIに表示することができる。 TwoWayモード データを双方向バインドするモードです。 「ソース→ターゲット方向」へのバインドはPropertyChangeによって実行されます。 「ターゲット→ソース方向」へのバインドはターゲット側の設定内容によって実行タイミングが異なります。 下記のコードは、ListBoxとTextBoxがTwoWayモードでバインドされているので、TextBoxに色名(たとえば「Pink」)を入力するとListBoxへ入力値がバインドされます。 StackPanel TextBlock Width="248" Height="24" Text="Colors " TextWrapping="Wrap"/ ListBox x Name="lbColor" Width="248" Height="56" ListBoxItem Content="Blue"/ ListBoxItem Content="Green"/ ListBoxItem Content="Yellow"/ ListBoxItem Content="Red"/ ListBoxItem Content="Purple"/ ListBoxItem Content="Orange"/ /ListBox TextBlock Width="248" Height="24" Text="You selected color " / TextBlock Width="248" Height="24" TextBlock.Text Binding ElementName="lbColor" Path="SelectedItem.Content"/ /TextBlock.Text TextBlock.Background Binding ElementName="lbColor" Path="SelectedItem.Content" / /TextBlock.Background /TextBlock TextBox Height="24" x Name="textBox1" Width="120" TextBox.Text !-- 双方向にバインドを形成する -- Binding ElementName="lbColor" Path="SelectedItem.Content" Mode="TwoWay" / /TextBox.Text TextBox.Background Binding ElementName="lbColor" Path="SelectedItem.Content" / /TextBox.Background /TextBox /StackPanel 上記のコードは問題があります。それはTextBoxへ入力された値がListBoxにバインドするためのバインドの実行が行われないという問題です。TextBoxコントロールがバインドを実行するタイミングは、フォーカスを失った時なのでフォーカスが失われない間はバインドが実行されません。(バインドが実行されるタイミングについて) Binding ElementName="lbColor" Path="SelectedItem.Content" Mode="TwoWay" UpdateSourceTrigger="PropertyChanged" / このように設定すると、プロパティが変更される度にバインドが実行されます。 OneWayToSourceモード バインドターゲットからバインドソースへ値を代入する バインドの実行タイミング バインドが実行されるタイミングはBinding.UpdateSourceTriggerの値によって決定されます。 Explicit BindingExpression.UpdateSource()のコールでのみバインドが実行 LostFocus コントロールからフォーカスが失われたときにバインドが実行 PropertyChanged プロパティの変更時にバインドが実行 OneWayモードのデータバインディングではデフォルトでPropertyChangedによるバインディングです。 TwoWayモードのデータバインディングでは、UIの種類によってタイミングは異なります。TextBoxではユーザーからの入力はLostFocusによってバインドソースへバインドされます。 PropertyChanged このバインドタイミングでバインドを実行するには、バインドソース(バインドターゲット)が INotifyPropertyChanged を実装し、PropertyChangedEventHandlerイベントを適切に呼び出すように実装します。(データオブジェクトによるバインド) LostFocus フォーカスが失われたときにバインドを実行します。 TextBoxなどユーザーからの入力を伴うコントロールでは、このバインドタイミングがデフォルトに設定されています。 コレクションのバインド データバインディングではバインドソースのコレクションをバインドできます。 しかし、バインドソースのコレクションをそのままバインドターゲットへバインドせずに、コレクションビューを作成しバインドソースとして使用します。 コレクションビューを使用する理由として、UIへの表示を行う際に並べ替え、フィルタ、およびグルーピングなどの処理を必要とするためです。コレクションビューを使用することで、直接バインドソースのコレクションを操作することなしに、並び替えなどのコレクションを使用できます。 ただし、バインドソースとするコレクションはINotifyCollectionChanged インターフェースを実装する必要があります。 コレクションビューの定義 Window Window.Resources c MyData x Key="myDataSources"/ CollectionViewSource Source="{Binding Source={StaticResource myDataSources} }" x Key="listDataView1" / /Window.Resources ... /Window コレクションビューは同一のソースを複数定義することもできます。 並べ替え・フィルタ・グルーピング 並び替えを設定するにはSortDescriptions属性を設定します。 SortDescriptionはコレクションの要素が持つオブジェクトのプロパティをPropertyNameで指定します。 並び替えの対象フィールドは複数設定することが可能です。 CollectionViewSource Source="{Binding Source={StaticResource myDataSources} }" x Key="listDataView1" !-- 並び替え設定「SortDescriptions」 -- CollectionViewSource.SortDescriptions scm SortDescription PropertyName="Category" Direction="Ascending" / scm SortDescription PropertyName="Age" Direction="Descending" / /CollectionViewSource.SortDescriptions /CollectionViewSource scm名前空間は次のようにルート要素に設定して使用してください。 xmlns scm="clr-namespace System.ComponentModel;assembly=WindowsBase" グルーピングを設定するにはGroupDescriptions属性を指定します。 CollectionViewSource Source="{Binding Source={StaticResource myDataSources} }" x Key="listDataView1" CollectionViewSource.GroupDescriptions PropertyGroupDescription PropertyName="Category" / /CollectionViewSource.GroupDescriptions /CollectionViewSource データオブジェクトによるバインド バインド機能を使用するには、INotifyPropertyChangedインターフェースを実装したクラスが必要です。 class Person INotifyPropertyChanged { public event PropertyChangedEventHandler PropertyChanged; public String name { get { return _name; } set { _name = value; firePropertyChanged("name"); } } protected void firePropertyChanged(string name) { if( PropertyChanged != null ) { // デリゲートの実行 PropertyChanged(this, new PropertyChangedEventArgs(name) ); } } private String _name; } firePropertyChanged()はプロパティが変更したことを知らせるイベント(デリゲート)を実行するメソッドです。引数はバインドのパス名で、上記の場合「firePropertyChanged("name")」とはバインドするプロパティ名である。 テキストボックスのTextプロパティにバインドする。 TextBox Name="tb" Text="{Binding Path=name}" / プロパティがバインドすることを簡単に記述するにはBindingマークアップ拡張を使用する。 バインドされるソースを上記のTextBoxに設定する必要があります。 通常はDataContextに設定を行います。 public Form() { tb.DataContext = person; } private Person person = new Person(); またはXAMLではプロパティは継承される為、TextBoxの上位の要素のDataContextに設定します。 Window Grid TextBox Text="{Binding Path=name}" / /Grid /Window // XAMLの分離コード public MainWindow Window { public MainWindow() { InitializeComponent(); Perons obj = new Person(); this.DataContext = obj; obj.name = "星井美希"; } } バインドターゲットとなるカスタムコントロールの作成 カスタムコントロールの作成はUserControlやPanelといったクラスを継承して作成すればいい。 ただし、カスタムコントロールでバインディング使う場合やWPFデザイナから値を設定するカスタムコントロールを作る場合は、依存関係プロパティという方法でプロパティを実装する必要がある。 実質すべての公開プロパティは依存関係プロパティで実装しなければならない。 依存関係プロパティの実装についてはこちら。 class MyControl UserControl, INotifyPropertyChanged { public string Idol { get { return (string)GetValue(IdolProperty); } set { SetValue(IdolProperty, value); } } /// summary /// Identifies the Value dependency property. /// /summary public static readonly DependencyProperty IdolProperty = DependencyProperty.Register( "Idol", typeof(string), typeof(MyControl), new FrameworkPropertyMetadata( string.Empty, // 初期値 FrameworkPropertyMetadataOptions.AffectsRender, new PropertyChangedCallback(OnIdolChanged) ) ); private static void OnIdolChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) { Console.WriteLine("Call OnIdolChanged"); Console.WriteLine("\t 古い値={0}", e.OldValue); Console.WriteLine("\t 新しい値={0}",e.NewValue); } }
https://w.atwiki.jp/controllerpad/pages/12.html
コントローラスレ 29個目 https //rosie.5ch.net/test/read.cgi/famicom/1490072623/ コントローラスレ 28個目 http //shiba.5ch.net/test/read.cgi/famicom/1466421817/ コントローラスレ 27個目 https //shiba.5ch.net/test/read.cgi/famicom/1446161469/ コントローラスレ 27個目(dat落ち) https //mastiff.5ch.net/test/read.cgi/famicom/1445421229/ コントローラスレ 26個目 https //mastiff.5ch.net/test/read.cgi/famicom/1416732328/ コントローラスレ 25個目 https //mastiff.5ch.net/test/read.cgi/famicom/1373811405/ コントローラスレ 24個目 https //toro.5ch.net/test/read.cgi/famicom/1348699633/ コントローラスレ 23個目 https //toro.5ch.net/test/read.cgi/famicom/1325052487/ コントローラスレ 22 個目 https //toki.5ch.net/test/read.cgi/famicom/1310938010/ コントローラスレ 21個目 https //toki.5ch.net/test/read.cgi/famicom/1282565297/ コントローラスレ 20個目 https //toki.5ch.net/test/read.cgi/famicom/1262449657/ コントローラスレ 19個目 https //jfk.5ch.net/test/read.cgi/famicom/1254062228/ コントローラスレ 18個目 https //jfk.5ch.net/test/read.cgi/famicom/1222444154/ コントローラスレ 17個目 https //schiphol.5ch.net/test/read.cgi/famicom/1200361125/ コントローラスレ 16個目 https //game13.5ch.net/test/read.cgi/famicom/1175307060/ コントローラスレ 15個目 https //game11.5ch.net/test/read.cgi/ghard/1166385859/ コントローラスレ 14個目 http //game10.5ch.net/test/read.cgi/ghard/1164953768/ コントローラスレ 13個目 https //game10.5ch.net/test/read.cgi/ghard/1160318958/ コントローラスレ 12個目 https //game10.5ch.net/test/read.cgi/ghard/1148119659/ コントローラスレ 11個目 https //game10.5ch.net/test/read.cgi/ghard/1143347237/ コントローラスレ 10個目 https //game10.5ch.net/test/read.cgi/ghard/1134321253/ コントローラスレ 9個目 https //game10.5ch.net/test/read.cgi/ghard/1127295996/ コントローラスレ 8個目 https //game10.5ch.net/test/read.cgi/ghard/1120010263/ コントローラスレ 7個目 https //game10.5ch.net/test/read.cgi/ghard/1113732606/ コントローラスレ 6個目 https //game10.5ch.net/test/read.cgi/ghard/1108687689/ コントローラスレ 5個目 https //game10.5ch.net/test/read.cgi/ghard/1102604451/ コントローラスレ 4 https //game10.5ch.net/test/read.cgi/ghard/1095346275/ コントローラスレ 3 https //game8.5ch.net/test/read.cgi/ghard/1084783160/ コントローラスレ 2 https //game6.5ch.net/test/read.cgi/ghard/1071906679/ コントローラスレ https //game2.5ch.net/test/read.cgi/ghard/1045818185/
https://w.atwiki.jp/gdiplus2/pages/26.html
1.使い方 2.バイナリ 3.readme 4.SS 5.履歴 使用にあたって 使い方 オプション一覧 使用にあたって 言うまでも無く、非常に危険な代物です。ソフトウェアの挙動を理解した上でご利用ください。CPUパワーを必要とするので、できるだけハイスペックなPCをお奨めします。 現在のところ、Windows 2000/XP で動作するハズですが、基本的にXPでのみ動作確認しています。使用は自己責任でお願いします。どんな損害がおこっても補償できません。 使い方 仕掛けたい実行ファイルをgdi++.exeにドラッグ ドロップすると、フックされた状態で起動します。Windows標準のコントロールのフォント描画にも影響が及びます。 オプション一覧 設定ファイル"gdi++.ini"を同じディレクトリに置くことで、レンダリングの設定ができます。(なくても動きます) [General] Quality=1 Weight=0 Enhance=0 UseSubPixel=0 SubPixelDirection=0 MaxHeight=0 ForceAntialiasedQuality=0 [Exclude] FixedSys Marlett メイリオ [Individual] Tahoma=3 [ExcludeModule] iexplore.exe firefox.exe Qualityフォントの品質を調節します。0 何もしない 1 2倍キレイ(デフォルト) 2 3倍キレイ 3 4倍キレイ Weightフォントの濃さを調節します。(n + 1)回重ねて描画します。 Enhance水平・垂直の輪郭線を強調します。0 強調しない(デフォルト) 1 少し強調 2 ふつうに強調 3 強く強調 4 激しく強調 UseSubPixel簡易サブピクセルレンダリング(ClearTypeもどき)を有効にします。0 つかわない(デフォルト) 1 つかう SubPixelDirectionサブピクセルレンダリングを使うときの、サブピクセルの並び順を指定します。ほとんどの液晶モニタは左からRGBの順にサブピクセルが並んでいますが、たまにBGRの順で並んでいるモニタもあるようです。0 RGB(デフォルト) 1 BGR MaxHeightスムージングを掛ける最大のフォントサイズを「ピクセル単位で」指定します。0 すべてのサイズ(デフォルト) ForceAntialiasedQualityWindowsのClearTypeを無視するかどうかを指定します。無視すれば描画が高速になります。0 標準の品質(デフォルト) 1 ClearTypeを無視 [Exclude]セクション標準のレンダラで描画したいフォントを一行に一書体ずつ記入します。フォント名がリストに合致すれば、gdi++.dll は標準のレンダラに描画を丸投げします。ビットマップフォントや、ClearType系のフォントにどうぞ。 [Individual]セクション指定したフォント毎にWeightを設定できます。 [ExcludeModule]セクションgdi++.dllを適用させたくない実行ファイルを指定できます。このセクションに記述された実行ファイルにはgdi++.dllが適用されません。
https://w.atwiki.jp/gdiplusplus/pages/30.html
1.使い方 2.バイナリ 3.readme 4.SS 5.履歴 使用にあたって 使い方 オプション一覧 使用にあたって 言うまでも無く、非常に危険な代物です。ソフトウェアの挙動を理解した上でご利用ください。CPUパワーを必要とするので、できるだけハイスペックなPCをお奨めします。 現在のところ、Windows 2000/XP で動作するハズですが、基本的にXPでのみ動作確認しています。使用は自己責任でお願いします。どんな損害がおこっても補償できません。 使い方 仕掛けたい実行ファイルをgdi++.exeにドラッグ ドロップすると、フックされた状態で起動します。Windows標準のコントロールのフォント描画にも影響が及びます。 オプション一覧 設定ファイル"gdi++.ini"を同じディレクトリに置くことで、レンダリングの設定ができます。(なくても動きます) [General] Quality=1 Weight=0 Enhance=0 UseSubPixel=0 SubPixelDirection=0 MaxHeight=0 ForceAntialiasedQuality=0 [Exclude] FixedSys Marlett メイリオ [Individual] Tahoma=3 [ExcludeModule] iexplore.exe firefox.exe Qualityフォントの品質を調節します。0 何もしない 1 2倍キレイ(デフォルト) 2 3倍キレイ 3 4倍キレイ Weightフォントの濃さを調節します。(n + 1)回重ねて描画します。 Enhance水平・垂直の輪郭線を強調します。0 強調しない(デフォルト) 1 少し強調 2 ふつうに強調 3 強く強調 4 激しく強調 UseSubPixel簡易サブピクセルレンダリング(ClearTypeもどき)を有効にします。0 つかわない(デフォルト) 1 つかう SubPixelDirectionサブピクセルレンダリングを使うときの、サブピクセルの並び順を指定します。ほとんどの液晶モニタは左からRGBの順にサブピクセルが並んでいますが、たまにBGRの順で並んでいるモニタもあるようです。0 RGB(デフォルト) 1 BGR MaxHeightスムージングを掛ける最大のフォントサイズを「ピクセル単位で」指定します。0 すべてのサイズ(デフォルト) ForceAntialiasedQualityWindowsのClearTypeを無視するかどうかを指定します。無視すれば描画が高速になります。0 標準の品質(デフォルト) 1 ClearTypeを無視 [Exclude]セクション標準のレンダラで描画したいフォントを一行に一書体ずつ記入します。フォント名がリストに合致すれば、gdi++.dll は標準のレンダラに描画を丸投げします。ビットマップフォントや、ClearType系のフォントにどうぞ。 [Individual]セクション指定したフォント毎にWeightを設定できます。 [ExcludeModule]セクションgdi++.dllを適用させたくない実行ファイルを指定できます。このセクションに記述された実行ファイルにはgdi++.dllが適用されません。